// var i;
// var $eventManager = require("./EventManager");
// var $resKeeper = require("./ResKeeper");
// var $evenType = require("./EvenType");
// var $playerDataManager = require("./PlayerDataManager");
// var $excel = require("./Excel");
// var $gameDataManager = require("./GameDataManager");
// var h = cc._decorator;
// var f = h.ccclass;
// var g = h.property;
// var _ = h.inspector;
// var y = (function (e) {
//     function t() {
//         var t = (null !== e && e.apply(this, arguments)) || this;
//         t.huangdong = null;
//         t.type = 1;
//         t.huangtw = null;
//         return t;
//     }
//     __extends(t, e);
//     t.prototype.onEnable = function () {
//         switch (this.type) {
//             case 1:
//                 $eventManager.EventMgr.addEventListener(
//                     $evenType.EVENT_TYPE.Game_Update_Level_Award,
//                     this.onUpdatUi,
//                     this
//                 );
//                 this.onUpdatUi();
//                 break;
//             case 2:
//                 $eventManager.EventMgr.addEventListener($evenType.EVENT_TYPE.HOME_QIANDAO_UPDATE, this.onQianDao, this);
//                 this.onQianDao();
//         }
//     };
//     t.prototype.onQianDao = function () {
//         $playerDataManager.PlayerDataMgr.resetQianDaoCount();
//         if (1 == $playerDataManager.PlayerDataMgr.globalData.isqiandaocode) {
//             this.node.children[0].active = !0;
//             this.startHuang();
//         } else {
//             this.huangtw && (this.huangtw.stop(), (this.huangdong.angle = 0));
//             this.huangdong.stopAllActions();
//             this.node.children[0].active = !1;
//         }
//     };
//     t.prototype.startHuang = function () {
//         if (this.huangdong) {
//             var e = cc
//                 .tween(this.huangdong)
//                 .to(0.1, {
//                     angle: -10
//                 })
//                 .to(0.1, {
//                     angle: 10
//                 })
//                 .to(0.1, {
//                     angle: -5
//                 })
//                 .to(0.1, {
//                     angle: 5
//                 })
//                 .to(0.1, {
//                     angle: 0
//                 })
//                 .delay(0.2);
//             this.huangtw = cc.tween(this.huangdong).repeatForever(e).start();
//         }
//     };
//     t.prototype.onUpdatUi = function () {
//         var e = $excel.Excel.shuiguolevel_all.size;
//         var t = !1;
//         for (var o = 0; o < e; o++) {
//             if ($gameDataManager.GameDataMgr.getLevelAwardHave(o + 1)) {
//                 t = !0;
//                 break;
//             }
//         }
//         this.node.children[0].active = t;
//     };
//     t.prototype.onDisable = function () {
//         $eventManager.EventMgr.rmEventListener($evenType.EVENT_TYPE.Game_Update_Level_Award, this.onUpdatUi, this);
//     };
//     __decorate([g(cc.Node)], t.prototype, "huangdong", void 0);
//     __decorate([g()], t.prototype, "type", void 0);
//     return __decorate([f], t);
// })($resKeeper.default);
// exports.default = y;


// import { EventMgrInstance } from "./EventManager";
// import ResKeeper from "./ResKeeper";
// import { EVENT_TYPE } from "./EvenType";
// import { PlayerDataMgr } from "./PlayerDataManager";
// import { Excel } from "./Excel";
// import { GameDataMgr } from "./GameDataManager";

// const { ccclass, property, inspector } = cc._decorator;

// /**
//  * 建议类名：HuangDongComponent
//  * 该类负责处理黄动组件的逻辑，包括启用、禁用、签到和更新UI等操作。
//  */
// @ccclass
// export default class Module_Fighting_RedPoint extends ResKeeper {
//     @property(cc.Node)
//     huangdong: cc.Node | null = null;

//     @property
//     type: number = 1;

//     private huangtw: cc.Tween | null = null;

//     /**
//      * 当组件启用时，根据类型添加相应的事件监听器并更新UI。
//      * 建议方法名：handleEnable
//      */
//     onEnable(): void {
//         switch (this.type) {
//             case 1:
//                 EventMgrInstance.addEventListener(
//                     EVENT_TYPE.Game_Update_Level_Award,
//                     this.onUpdatUi,
//                     this
//                 );
//                 this.onUpdatUi();
//                 break;
//             case 2:
//                 EventMgrInstance.addEventListener(
//                     EVENT_TYPE.HOME_QIANDAO_UPDATE,
//                     this.onQianDao,
//                     this
//                 );
//                 this.onQianDao();
//         }
//     }

//     /**
//      * 处理签到逻辑，根据签到状态更新UI。
//      * 建议方法名：handleQianDao
//      */
//     onQianDao(): void {
//         PlayerDataMgr.resetQianDaoCount();
//         if (1 == PlayerDataMgr.globalData.isqiandaocode) {
//             this.node.children[0].active = !0;
//             this.startHuang();
//         } else {
//             this.huangtw && (this.huangtw.stop(), (this.huangdong.angle = 0));
//             // this.huangdong && this.huangdong.stopAllActions();
//             if (this.huangdong) {
//                 cc.Tween.stopAllByTarget(this.huangdong);
//             }
//             this.node.children[0].active = !1;
//         }
//     }

//     /**
//      * 开始黄动动画。
//      * 建议方法名：startHuangDongAnimation
//      */
//     startHuang(): void {
//         if (this.huangdong) {
//             const tweenSequence = cc
//                 .tween(this.huangdong)
//                 .to(0.1, { angle: -10 })
//                 .to(0.1, { angle: 10 })
//                 .to(0.1, { angle: -5 })
//                 .to(0.1, { angle: 5 })
//                 .to(0.1, { angle: 0 })
//                 .delay(0.2);

//             this.huangtw = cc.tween(this.huangdong).repeatForever(tweenSequence).start();
//         }
//     }

//     /**
//      * 更新UI，根据游戏数据管理器中的奖励状态更新节点的可见性。
//      * 建议方法名：updateUI
//      */
//     onUpdatUi(): void {
//         const levelCount = Excel.shuiguolevel_all.size;
//         let hasAward = false;

//         for (let i = 0; i < levelCount; i++) {
//             if (GameDataMgr.getLevelAwardHave(i + 1)) {
//                 hasAward = true;
//                 break;
//             }
//         }

//         this.node.children[0].active = hasAward;
//     }

//     /**
//      * 当组件禁用时，移除事件监听器。
//      * 建议方法名：handleDisable
//      */
//     onDisable(): void {
//         EventMgrInstance.rmEventListener(
//             EVENT_TYPE.Game_Update_Level_Award,
//             this.onUpdatUi,
//             this
//         );
//     }
// }

import { EventMgrInstance } from "./EventManager";
import ResKeeper from "./ResKeeper";
import { EVENT_TYPE } from "./EvenType";
import { PlayerDataMgr } from "./PlayerDataManager";
import { Excel } from "./Excel";
import { GameDataMgr } from "./GameDataManager";

const { ccclass, property, inspector } = cc._decorator;

/**
 * 建议类名：HuangDongComponent
 * 该类负责处理黄动组件的逻辑，包括启用、禁用、签到和更新UI等操作。
 */
@ccclass
export default class ModuleFightingRedPoint extends ResKeeper {
    
    // 黄动节点
    @property(cc.Node)
    huangdong: cc.Node | null = null;

    // 类型
    @property
    type: number = 1;

    // 黄动动画
    private huangtw: cc.Tween | null = null;

    /**
     * 当组件启用时，根据类型添加相应的事件监听器并更新UI。
     * 建议方法名：handleEnable
     */
    onEnable(): void {
        switch (this.type) {
            case 1:
                EventMgrInstance.addListener(
                    EVENT_TYPE.Game_Update_Level_Award,
                    this.updateUI,
                    this
                );
                this.updateUI();
                break;
            case 2:
                EventMgrInstance.addListener(
                    EVENT_TYPE.HOME_QIANDAO_UPDATE,
                    this.handleQianDao,
                    this
                );
                this.handleQianDao();
        }
    }

    /**
     * 处理签到逻辑，根据签到状态更新UI。
     * 建议方法名：handleQianDao
     */
    handleQianDao(): void {
        PlayerDataMgr.resetQianDaoCount();
        if (PlayerDataMgr.globalData.isqiandaocode === 1) {
            this.node.children[0].active = true;
            this.startHuangDongAnimation();
        } else {
            if (this.huangtw) {
                this.huangtw.stop();
                if (this.huangdong) {
                    this.huangdong.angle = 0;
                    cc.Tween.stopAllByTarget(this.huangdong);
                }
            }
            this.node.children[0].active = false;
        }
    }

    /**
     * 开始黄动动画。
     * 建议方法名：startHuangDongAnimation
     */
    startHuangDongAnimation(): void {
        if (this.huangdong) {
            const tweenSequence = cc
                .tween(this.huangdong)
                .to(0.1, { angle: -10 })
                .to(0.1, { angle: 10 })
                .to(0.1, { angle: -5 })
                .to(0.1, { angle: 5 })
                .to(0.1, { angle: 0 })
                .delay(0.2);

            this.huangtw = cc.tween(this.huangdong).repeatForever(tweenSequence).start();
        }
    }

    /**
     * 更新UI，根据游戏数据管理器中的奖励状态更新节点的可见性。
     * 建议方法名：updateUI
     */
    updateUI(): void {
        const levelCount = Excel.shuiguolevel_all.size;
        let hasAward = false;

        for (let i = 0; i < levelCount; i++) {
            if (GameDataMgr.hasLevelAward(i + 1)) {
                hasAward = true;
                break;
            }
        }

        this.node.children[0].active = hasAward;
    }

    /**
     * 当组件禁用时，移除事件监听器。
     * 建议方法名：handleDisable
     */
    onDisable(): void {
        EventMgrInstance.removeListener(
            EVENT_TYPE.Game_Update_Level_Award,
            this.updateUI,
            this
        );
        EventMgrInstance.removeListener(
            EVENT_TYPE.HOME_QIANDAO_UPDATE,
            this.handleQianDao,
            this
        );
    }
}
